﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using AccesoDatos.Manejador;
using AccesoDatos.Objetos;
using Conexion;
using System.Windows.Forms;
using Autorizacion_facturas_caja.Empleado;
/*
 * Captura los datos del empleado 
 *  Modifica los datos por separado del usuario
 *  Datos del empleado
 *  Sueldo 
 *  Contrato 
 * Enlace a la interfaz para agregar detalles del empleado.
 * 
 */
namespace Autorizacion_facturas_caja 
{
    public partial class frmEmpleado_Captura : Form
    {
        Manejador_Empleado_Captura Mane = new Manejador_Empleado_Captura();
        ClsConexion conexion = new ClsConexion();
        objRH obj1 = new objRH();
        frmEmpleado_Busqueda Buscar1 = new frmEmpleado_Busqueda();
        frmContrato_Vencimiento ven = new frmContrato_Vencimiento();
        public objRH obj = new objRH();
        int bandera;

        #region funciones

        public frmEmpleado_Captura(int flag)
        {
            InitializeComponent();
           
            ToolTip1();
            
            if (flag == -1)
            {
                ObtieneDatosCombo();
                habilitarCampos(0);
         
            }
            else
            {
                obj.Id_Empleado = flag;
                bandera = 3;
                habilitarCampos(7);
                habilitarCampos(4);
                habilitarCampos(5);
                ObtieneDatosCombo();
                btnCancelar.Visible = false;
                mostrarDatos();
                chkNorenovar.Visible = false;
            }
        }
        //Limpia los campos
        private void limpiar()
        {
            //Limpia los campos
            txtNombre.Text = "";
            txtApellido.Text = "";
            txtPuesto.Text = "";
            txtCuenta.Text = "";
            txtBono.Text = "";
            txtMensual.Text = "";
            txtSueldoDia.Text = "";
            txtQuincenal.Text = "";
           // dateInicio.Text = "";
            //dateFin.Text = "";
            cmbTipo.Text = "";
            cmbEmpresa.Text = "";
            lblJefe.Text = "";
            chkContrato.Checked = false;
            chkEntregado.Checked = false;

        }
        private void ObtieneDatosCombo()
        {

            //Obtiene los datos de la tabla cat_sucursales al combo de sucursales
            cmbSucursal.DataSource = Mane.ObtieneSucursales();
            cmbSucursal.ValueMember = "SucId";
            cmbSucursal.DisplayMember = "Nombre";

            cmbEmpresa.DataSource = Mane.ObtieneEmpresa();
            cmbEmpresa.ValueMember = "id_empresa";
            cmbEmpresa.DisplayMember = "empresa";

            cmbDepartamento.DataSource = Mane.ObtieneDepartamento();
             cmbDepartamento.ValueMember = "id_departamento";
             cmbDepartamento.DisplayMember = "departamento";
            
        }
        private void ToolTip1()
        {

            ToolTip toolTip1 = new ToolTip();
            toolTip1.ShowAlways = true;
            toolTip1.SetToolTip(this.btnBuscar, "BUSCAR EMPLEADO");
            toolTip1.SetToolTip(this.btnGuardar, "GUARDAR");
            toolTip1.SetToolTip(this.btnCancelar, "CANCELAR");
            toolTip1.SetToolTip(this.btnModificarContrato, "MODIFICAR CONTRATO");
            toolTip1.SetToolTip(this.btnModificarDatos, "MODIFICAR DATOS EMPLEADO");
            toolTip1.SetToolTip(this.btnModificarSueldo, "MODIFICAR SUELDO");
            toolTip1.SetToolTip(this.btnLimpiar, "LIMPIAR");
            toolTip1.SetToolTip(this.btnAdicional, "DATOS ADICIONALES");
            toolTip1.SetToolTip(this.btnGuardarMod, "GUARDAR CAMBIOS");
            toolTip1.SetToolTip(this.btnSalir, "REGRESAR");
            toolTip1.SetToolTip(this.btnReporte_Contrato, "REPORTE CONTRATO");
            toolTip1.SetToolTip(this.btnReporte_Sueldo, "REPORTE SUELDO");
        }
        private bool validar()
        {
            bool bandera1=false;
            //Valida que los textfields se encuentren con texto
            switch(bandera)
            {
                case 1:
                    if (txtNombre.Text != "" && txtApellido.Text != "" &&
                        txtCuenta.Text != "" && txtPuesto.Text != "" && cmbSucursal.SelectedItem != null && obj.IdJefe!=null) bandera1 = true;
                    else bandera1 = false;
                    break;
                case 2:
                    if (txtMensual.Text != "" &&
                        txtQuincenal.Text != "" && txtBono.Text != "") bandera1 = true;
                    else bandera1 = false;
                    break;
                case 3:
                    bandera1 = true;
                    break;
                case 4:
                    if (txtNombre.Text != "" && txtApellido.Text != "" &&
             txtCuenta.Text != "" && txtPuesto.Text != "" && txtMensual.Text != "" &&
             txtQuincenal.Text != "" && txtBono.Text != "" && cmbSucursal.SelectedItem != null && obj.IdJefe != null) bandera1 = true;
                    else bandera1 = false;
                    break;
            
            }
            return bandera1;
        }
        //Habilita o desahabilita campos o botones segun sea el caso 
        private void habilitarCampos(int op)
        {

            switch (op)
            {
                case 0: //Inicial
                    btnAdicional.Visible = false;
                    btnModificarContrato.Visible = false;
                    btnModificarDatos.Visible = false;
                    btnModificarSueldo.Visible = false;
                    btnGuardarMod.Visible = false;
                    btnCancelar.Visible = false;
                    btnBuscar.Visible = true;
                    btnGuardar.Visible = true;
                    btnLimpiar.Visible = true;
                    btnSalir.Visible = true;
                    btnReporte_Contrato.Visible = false;
                    btnReporte_Sueldo.Visible = false;
                    lblfecha.Visible = false;
                    dteFecha.Visible = false;
                    chkNorenovar.Visible = false;

                    break;
                case 1: //Boton buscar
                    btnAdicional.Visible = true;
                    btnModificarContrato.Visible = true;
                    btnModificarDatos.Visible = true;
                    btnModificarSueldo.Visible = true;
                    btnReporte_Sueldo.Visible = true;
                    btnReporte_Contrato.Visible = true;
                    btnGuardar.Visible = false;
                    btnLimpiar.Visible = false;
                    btnGuardarMod.Visible = false;
                    btnCancelar.Visible = false;
                    btnBuscar.Visible = true;
                    btnSalir.Visible = true;
                    lblfecha.Visible = false;
                    dteFecha.Visible = false;
                    chkNorenovar.Visible = false;
                    break;
                case 2: // Modificar Datos
                    txtNombre.Enabled = true;
                    txtApellido.Enabled = true;
                    cmbSucursal.Enabled = true;
                    cmbDepartamento.Enabled = true;
                    
                    cmbEmpresa.Enabled = true;
                    btnBuscarJefe.Visible = true;
                    lblJefe.Enabled = true;
                    txtCuenta.Enabled = true;
                    txtPuesto.Enabled = true;
                    lblfecha.Visible = false;
                    dteFecha.Visible = false;
                    chkNorenovar.Visible = false;

                    break;
                case 3: //Modificar sueldo
                    txtMensual.Enabled = true;
                    txtQuincenal.Enabled = true;
                    txtBono.Enabled = true;
                    txtSueldoDia.Enabled = true;
                    lblfecha.Visible = true;
                    dteFecha.Visible = true;
                    chkNorenovar.Visible = false;

                    break;
                case 4: // Modificar contrato
                    cmbTipo.Enabled = true;
                    chkContrato.Enabled = true;
                    chkEntregado.Enabled = true;
                    dateFin.Enabled = true;
                    dateInicio.Enabled = true;
                    lblfecha.Visible = false;
                    dteFecha.Visible = false;
                   
                    break;
                case 5: //Cuando se modifica
                    btnAdicional.Visible = false;
                    btnModificarContrato.Visible = false;
                    btnModificarDatos.Visible = false;
                    btnModificarSueldo.Visible = false;
                    btnBuscar.Visible = false;
                    btnLimpiar.Visible = false;
                    btnReporte_Contrato.Visible = false;
                    btnReporte_Sueldo.Visible = false;
                    btnGuardarMod.Visible = true;
                    btnCancelar.Visible = true;
                    btnSalir.Visible = false;
                    btnGuardar.Visible = false;
                    break;
                case 6://Habilitar todos los campos
                    txtNombre.Enabled = true;
                    txtApellido.Enabled = true;
                    cmbSucursal.Enabled = true;
                    cmbDepartamento.Enabled = true;
                    btnBuscarJefe.Enabled = true;
                    lblJefe.Enabled = true;
                    txtCuenta.Enabled = true;
                    cmbEmpresa.Enabled = true;
                    txtPuesto.Enabled = true;
                    txtMensual.Enabled = true;
                    txtQuincenal.Enabled = true;
                    txtSueldoDia.Enabled = true;
                    txtBono.Enabled = true;
                    cmbTipo.Enabled = true;
                    chkContrato.Enabled = true;
                    chkEntregado.Enabled = true;
                    dateFin.Enabled = true;
                    dateInicio.Enabled = true;
                    lblfecha.Visible = false;
                    dteFecha.Visible = false;
                    chkNorenovar.Visible = false;
                    break;
                case 7: //Desahabilitar todos los campos
                    txtNombre.Enabled = false;
                    txtApellido.Enabled = false;
                    cmbSucursal.Enabled = false;
                    cmbEmpresa.Enabled = false;
                    cmbDepartamento.Enabled = false;
                    btnBuscarJefe.Visible= false;
                    lblJefe.Enabled = false;
                    txtCuenta.Enabled = false;
                    txtPuesto.Enabled = false;
                    txtMensual.Enabled = false;
                    txtQuincenal.Enabled = false;
                    txtSueldoDia.Enabled=false;
                    txtBono.Enabled = false;
                    cmbTipo.Enabled = false;
                    chkContrato.Enabled = false;
                    chkEntregado.Enabled = false;
                    dateFin.Enabled = false;
                    dateInicio.Enabled = false;
                    break;

            }
        }
        private void mostrarDatos() 
        {
            try
            {
                double sueldom, sueldoq, bono, sueldod;
                //ObtieneDatosCombo();
                obj = Mane.ObtieneEmpleado(obj.Id_Empleado);
                txtNombre.Text = obj.Nombre.ToString();
                txtApellido.Text = obj.Apellidos.ToString();

                cmbDepartamento.SelectedValue = obj.Id_Departamento;
                txtPuesto.Text = obj.Puesto.ToString();
                cmbEmpresa.SelectedValue = obj.id_empresa;

                // ObtieneDatosSucursal();
                cmbSucursal.SelectedValue = obj.SucId;
                try
                {
                    objRH objJefe = new objRH();
                    objJefe = Mane.ObtieneEmpleado(obj.IdJefe);
                    lblJefe.Text = objJefe.Nombre + " " + objJefe.Apellidos;
                }
                catch { }
               // cmbJefe.DataSource = Mane.ObtieneEmpleados(cmbSucursal.SelectedValue.ToString());
                //cmbJefe.SelectedValue = obj.IdJefe.ToString();

                txtCuenta.Text = obj.Cuenta_Banco.ToString();
                obj = Mane.ObtieneSueldoContrato(obj.Id_Empleado);
            
                    sueldom = Convert.ToDouble(obj.Sueldo_Mensual);
                    sueldoq = Convert.ToDouble(obj.Sueldo_Quincenal);
                    sueldod = Convert.ToDouble(obj.Salario_dia);
                    bono = Convert.ToDouble(obj.Bono);

                    cmbTipo.Text = obj.Tipo;
                    try
                    {
                        dateInicio.Text = obj.Fecha_Inicio.ToShortDateString();
                        dateFin.Text = obj.Fecha_Fin.ToShortDateString();
                    }
                    catch { 
                    
                    }
                    txtMensual.Text = sueldom.ToString();
                    txtQuincenal.Text = sueldoq.ToString();
                    txtBono.Text = bono.ToString();
                    txtSueldoDia.Text = sueldod.ToString();
                    if (obj.Entregado == 1) chkEntregado.Checked = true;
                    if (obj.Fisico == 1) chkContrato.Checked = true;
         
              }
            catch 
            {
                MessageBox.Show("ERROR AL OBTENER DATOS", "ALERTA");
            }
        }
        private void obtenerCampos()
        {

            switch (bandera)
            {

                case 1:
                    obj.Nombre = txtNombre.Text.Trim();
                    obj.Apellidos = txtApellido.Text.Trim();
                    obj.Departamento = cmbDepartamento.SelectedValue.ToString();
                    obj.Puesto = txtPuesto.Text.Trim();
                    obj.SucId = cmbSucursal.SelectedValue.ToString();
                   // obj.IdJefe = Convert.ToInt32(cmbJefe.SelectedValue);
                    obj.Cuenta_Banco = txtCuenta.Text.Trim();
                    obj.Nombre_empresa = cmbEmpresa.SelectedValue.ToString();
                    break;
                case 2:
                    obj.Bono = txtBono.Text.Trim();
                    obj.Sueldo_Mensual = txtMensual.Text.Trim();
                    obj.Sueldo_Quincenal = txtQuincenal.Text.Trim();
                    obj.Salario_dia = txtSueldoDia.Text.Trim();
                    obj.Fecha = dteFecha.Value;
                    break;
                case 3:
                    obj.Tipo = cmbTipo.Text.Trim();
                    obj.Fecha_Inicio = dateInicio.Value;
                    obj.Fecha_Fin = dateFin.Value;
                    if (chkContrato.Checked) obj.Fisico = 1; else obj.Fisico = 0;
                    if (chkEntregado.Checked) obj.Entregado = 1; else obj.Entregado = 0;
                    break;

            }
        }
     
        #endregion
     
        #region botones
            private void btnGuardar_Click(object sender, EventArgs e)
            {
                try
                {
                    obj.Nombre = txtNombre.Text.Trim();
                    obj.Apellidos = txtApellido.Text.Trim();
                    obj.Departamento = cmbDepartamento.SelectedValue.ToString();
                    obj.Puesto = txtPuesto.Text.Trim();
                    obj.SucId = cmbSucursal.SelectedValue.ToString();
                  //  obj.IdJefe = Convert.ToInt32(cmbJefe.SelectedValue);
                    obj.Tipo = cmbTipo.Text.Trim();
                    obj.Cuenta_Banco = txtCuenta.Text.Trim();
                    obj.Bono = txtBono.Text.Trim();
                    obj.Sueldo_Mensual = txtMensual.Text.Trim();
                    obj.Sueldo_Quincenal = txtQuincenal.Text.Trim();
                    obj.Salario_dia = txtSueldoDia.Text.Trim();
                    obj.Fecha_Inicio = dateInicio.Value;
                    obj.Fecha_Fin = dateFin.Value;
                    obj.Nombre_empresa = cmbEmpresa.SelectedValue.ToString();
                 
                    if (chkContrato.Checked) obj.Fisico = 1; else obj.Fisico = 0;
                    if (chkEntregado.Checked) obj.Entregado = 1; else obj.Entregado = 0;
                    bandera = 4;
                    if (validar())
                    {
                        bool res = Mane.GuardarEmpleado(obj.Nombre, obj.Apellidos, obj.Puesto, obj.Departamento, obj.SucId, obj.IdJefe, obj.Cuenta_Banco, 1,obj.Nombre_empresa, obj.Sueldo_Mensual, obj.Sueldo_Quincenal, 1, obj.Bono, obj.Salario_dia,obj.Tipo, obj.Fecha_Inicio, obj.Fecha_Fin, obj.Entregado, obj.Fisico, 1);
                        if (res)
                        {
                            MessageBox.Show("SE GUARDO CORRECTAMENTE","AVISO");
                            limpiar();
                        }
                        else { MessageBox.Show("ERROR AL INTERNTAR GUARDAR", "ALERTA"); }
                    }
                    else { MessageBox.Show("FALTAN DATOS POR CAPTURAR", "ERROR"); }
                }
                catch
                { }
            }      
            private void btnLimpiar_Click_1(object sender, EventArgs e)
            {
                limpiar();
            }          
            private void btnAdicional_Click(object sender, EventArgs e)
            {
                frmEmpleado_Detalle Detalle = new frmEmpleado_Detalle(obj);
                Detalle.ShowDialog();

            }          
            private void btnCancelar_Click(object sender, EventArgs e)
            {
                mostrarDatos();
                habilitarCampos(7);
                habilitarCampos(1);
            }            
           private void btnBuscar_Click(object sender, EventArgs e)
            {
                try
                {
                    Buscar1.ShowDialog();
                    if (Buscar1.obj1.Id_Empleado != 0)
                    {
                        obj.Id_Empleado = Buscar1.obj1.Id_Empleado;
                        mostrarDatos();
                        habilitarCampos(7);
                        habilitarCampos(1);
                        btnReporte_Sueldo.Visible = true;
                    }

                }
                catch
                { //MessageBox.Show("Error al mostrar datos");
                }

            }           
            private void btnModificarSueldo_Click(object sender, EventArgs e)
            {
                habilitarCampos(5);
                habilitarCampos(3);
                bandera = 2;
            }          
            private void btnModificarContrato_Click(object sender, EventArgs e)
            {
                habilitarCampos(5);
                habilitarCampos(4);
                chkNorenovar.Visible = true;
                bandera = 3;

            }
            private void btnSalir_Click(object sender, EventArgs e)
            {
                Close();
            }      
            private void btnModificarDatos_Click(object sender, EventArgs e)
            {
                bandera = 1;
                habilitarCampos(5);
                habilitarCampos(2);
            }
            private void btnGuardarMod_Click(object sender, EventArgs e)
            {

                if (validar()) //Valida que los campos no esten vacios
                {
                    bool res = false;

                    obtenerCampos(); // Obtiene los datos de los campos segun el caso
                    switch (bandera)
                    {
                        //Se modifican los datos de la tabla cat_empleados
                        case 1: res = Mane.ModificaDatos(obj.Id_Empleado, obj.Nombre, obj.Apellidos, obj.Puesto, obj.Departamento, obj.SucId, obj.IdJefe, obj.Cuenta_Banco, obj.Nombre_empresa);
                            break;
                        case 2: //Se modifican los datos de la tabla RH_Sueldo                        
                            res = Mane.ModificaSueldo(obj.Id_Empleado, obj.IdSueldo, obj.Sueldo_Mensual, obj.Sueldo_Quincenal, obj.Bono, obj.Fecha, obj.Salario_dia);
                            break;
                        //Se modifican los datos de la tabla RH_empleados_contrato
                        case 3:
                            if (chkNorenovar.Checked)
                            {
                                if (MessageBox.Show("SEGURO DE DAR DE BAJA A EMPLEADO", "ALERTA", MessageBoxButtons.OKCancel) == DialogResult.OK)
                                {
                                    try
                                    {
                                        res = Mane.BajaEmpleado(obj.Id_Empleado);
                                        frmEmpleado_Renuncia ren = new frmEmpleado_Renuncia(obj);
                                        ren.ShowDialog();
                                        limpiar();
                                        habilitarCampos(0);
                                        habilitarCampos(7);
                                        habilitarCampos(6);
                                        MessageBox.Show("EMPLEADO DADO DE BAJA","AVISO");
                                        Close();
                                    }
                                    catch
                                    {
                                        MessageBox.Show("EMPLEADO NO DADO DE BAJA","ALERTA");               
                                    }
                                }
                                else {
                                    res = true;
                                    chkNorenovar.Checked = false;
                                }
                            }
                            else
                            {
                                res = Mane.ModificaContrato(obj.Id_Empleado, obj.IdContrato, obj.Tipo, obj.Fecha_Inicio, obj.Fecha_Fin, obj.Entregado, obj.Fisico);
                                mostrarDatos();
                                habilitarCampos(7);
                                habilitarCampos(1);
                                MessageBox.Show("MODIFICADO CORRECTAMENTE","AVISO");
                            }
                            
                            break;
                    }
                    if (res)
                    {

                        if (bandera != 3)
                        {
                            MessageBox.Show("MODIFICADO CORRECTAMENTE","AVISO");
                            mostrarDatos();
                            habilitarCampos(7);
                            habilitarCampos(1);
                        }
                    }
                    else { MessageBox.Show("OCURRIO UN ERROR INTERNO","ALERTA"); }
                }
               else { MessageBox.Show("FALTAN DATOS POR CAPTURAR", "ALERTA"); }

            }
            private void button1_Click(object sender, EventArgs e)
            {
                try
                {
                    Buscar1.ShowDialog();
                    obj.IdJefe = Buscar1.obj1.Id_Empleado;
                    lblJefe.Text = Buscar1.obj1.Nombre_completo;
                }
                catch
                { //MessageBox.Show("Error al mostrar datos");
                }
            }
            private void btnReporte_Sueldo_Click(object sender, EventArgs e)
            {
                frmReporte_Empleado_Sueldo rep = new frmReporte_Empleado_Sueldo(obj.Id_Empleado);
                rep.ShowDialog();
            }
            private void btnReporte_Contrato_Click(object sender, EventArgs e)
            {
                frmEmpleado_Reporte_Contrato rep = new frmEmpleado_Reporte_Contrato(obj.Id_Empleado);
                rep.ShowDialog();
            }
        #endregion 

        #region eventos 

        private void cmbSucursal_SelectedIndexChanged(object sender, EventArgs e)
        {
            //Obtiene los datos de la tabla cat_empleados al comboJefe
           // cmbJefe.DataSource = Mane.ObtieneEmpleados(cmbSucursal.SelectedValue.ToString());
            //cmbJefe.ValueMember = "id_empleado";
            //cmbJefe.DisplayMember = "nombre_apellidos";
        }

        private void txtSueldoDia_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsDigit(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsSeparator(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsPunctuation(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        }

        private void txtCuenta_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsDigit(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsSeparator(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        }

        private void txtMensual_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsDigit(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsSeparator(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsPunctuation(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        }

        private void txtQuincenal_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsDigit(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsSeparator(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsPunctuation(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        }

        private void txtBono_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsDigit(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsSeparator(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsPunctuation(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        }

        private void dateInicio_ValueChanged(object sender, EventArgs e)
        {
            if (dateInicio.Value >= dateFin.Value)
            {
                dateInicio.Value = DateTime.Today;
                MessageBox.Show("FECHA INCORRECTA", "ALERTA"); 
            }
            
        }

        private void dateFin_ValueChanged(object sender, EventArgs e)
        {
            if (dateFin.Value <= dateInicio.Value)
                {
                    dateFin.Value = DateTime.Today.AddDays(1);
                    MessageBox.Show("FECHA INCORRECTA", "ALERTA");
                }
        }

        #endregion

       

    }
}
